宣伝失礼しました。本編に移ります。
広告出稿サービスを使い始めると、日々の効果測定、細かな入札単価の調整、週次や月次のレポート作成、検索クエリの精査など、多くの手動対応が必要なことに気づかされます。管理画面を何度も確認したり、レポートとして結果を都度ダウンロードしたりと、貴重な時間をこうした定型業務に費やしているご担当者様も多いのではないでしょうか。これらの作業は重要である一方、ヒューマンエラーのリスクを伴い、より戦略的な業務に割くべき時間を圧迫しているのが実情です。
その強力な解決策となるのが、Google広告アカウントの標準機能である「Google広告スクリプト」です。この機能を活用すれば、これまで手作業で行ってきた面倒なルーティンワークの大部分を自動化し、広告運用の精度と効率を飛躍的に向上させることが可能です。
今回は「Google広告スクリプトなんて使ったことない!」「プログラミングの知識が必要で難しそう」といった懸念をお持ちの広告運用ご担当者様に向けて、基本知識から具体的な設定方法、さらにはコピー&ペーストですぐに使える実践的なサンプルコードまで、網羅的に詳しくご紹介します。この記事を読み終える頃には、スクリプト導入へのハードルが下がり、ご自身の業務を効率化するための具体的な道筋が見えているはずです。
また、Google広告に関してに関してさらに知見を深めたい!という方は、以下の記事に総括的にまとめてありますので、ぜひ読んでみてください。

また、ディスプレイ広告に関してに関してさらに知見を深めたい!という方は、以下の記事に総括的にまとめてありますので、ぜひ読んでみてください。

Google広告スクリプトとは
ここでは、Google広告スクリプトとは具体的にどのようなものなのか、その仕組みや位置づけ、そしてなぜ現代の広告運用において重要視されるのかについて、基本から詳しく解説します。
基本知識:Google広告を操る魔法の呪文
Google広告スクリプトは、2012年から提供されているサービスで、提供開始当初は「Adwords Script(アドワーズスクリプト)」という名称でした。意外と長い歴史を持つサービスであることに、驚かれた方もいるのではないでしょうか。
その正体は、「JavaScript」という広く使われているプログラミング言語を利用して、本来は手作業で行うGoogle広告アカウント内のさまざまな処理を自動化するためのツールです。Google広告の管理画面に組み込まれた専用のエディタ(コードを記述する画面)でプログラムを作成・実行することで、Googleのサーバーが直接、皆さまの広告アカウントに対して指示通りの操作を行ってくれます。
「JavaScript?名前は聞いたことがあるけれど、プログラマーでないと触れないのでは…」と感じるかもしれません。確かに、ゼロから複雑なロジックを組むには専門知識が必要な側面もあります。しかし、Google広告スクリプトの大きな特徴は、そこまで専門的な知識がなくとも、ある程度利用できるように様々な「お助けグッズ」が用意されている点です。後述する豊富なテンプレートや、ウェブ上で公開されている多くのサンプルコードを活用することで、プログラマーでなくともその強力な恩恵を受けることが可能です。いわば、広告アカウントを自在に操るための「魔法の呪文(コード)」のようなものだとお考えください。
なぜ今、Google広告スクリプトが重要なのか?
現代のデジタル広告運用は、ますます複雑化・高速化しています。手動での運用には、どうしても限界があります。
ヒューマンエラーのリスク:毎日何十、何百というキーワードの入札単価を手で変更していては、設定ミスや確認漏れが起こる可能性は避けられません。一つのミスが大きな広告費の無駄遣いに繋がることもあります。
機会損失の発生:例えば、深夜から早朝にかけてコンバージョン率が高まる商材を扱っている場合、その時間帯に手動で入札を強化するのは現実的ではありません。24時間365日、最適なタイミングを逃さず運用するには、自動化が不可欠です。
データドリブン運用の限界:膨大なデータを分析し、それに基づいて迅速にアクションを起こすことが成果向上の鍵です。しかし、人間が分析・判断・実行する速度には限界があります。昨日一日のデータを分析し、今日のアクションプランを立てる、といったサイクルでは、変化の速い市場に対応しきれない場合があります。
Google広告スクリプトは、これらの課題を解決するための極めて有効な手段です。機械的な作業をスクリプトに任せることで、運用者はヒューマンエラーのリスクから解放され、より創造的・戦略的な業務、例えば広告クリエイティブの改善や新たなターゲット戦略の立案などに集中できるようになります。これにより、CPA(顧客獲得単価)の改善やROAS(広告費用対効果)の向上といった、事業の根幹に関わるKPI達成に大きく貢献するのです。
使い方の大まかな流れ
Google広告スクリプトの基本的な使い方の流れは、非常にシンプルです。
まずはGoogle広告の管理画面にログインし、上部のメニューから「ツールと設定」アイコンをクリックし、「一括操作」の中にある「スクリプト」を選択します。
この画面で、新しいスクリプトをゼロから作成したり、Googleが予め用意してくれている便利なテンプレートを利用して作成したりすることが可能です。
その後は、作成したスクリプトをどのくらいの頻度で実行するか(例:1時間ごと、毎日、毎週月曜日の朝9時など)を設定すれば、あとはGoogleが自動で定期的に処理を実行してくれます。一度設定してしまえば、あなたが寝ている間も、休暇中も、スクリプトは忠実に働き続けてくれるのです。
Google広告スクリプトのメリット・デメリット【徹底深掘り】
ここでは、Google広告スクリプトの導入を検討されている方のために、そのメリットと、導入前に必ず知っておくべきデメリットや注意点について、より深く掘り下げて詳しく説明します。
メリット:無料で手に入る超高性能なアシスタント
Google広告スクリプトが持つメリットは多岐にわたりますが、特に強力な利点を3つご紹介します。
1. 圧倒的なコストパフォーマンス(完全無料)
最大のメリットは、Google広告の機能の一つとして提供されているため、広告出稿者であれば誰でも無料で利用可能な点です。広告運用の自動化ツールを外部サービスとして導入する場合、機能に応じて月額数万円から数十万円の利用料が発生することが一般的です。スクリプトを使いこなせれば、これらのコストを完全にゼロにすることができ、その分の予算を広告費に投下するなど、より直接的な投資に回すことが可能になります。これは、特に予算が限られている中小企業や、多くのクライアントを抱える広告代理店にとって計り知れないメリットと言えるでしょう。
2. 驚異的な柔軟性とカスタマイズ性
Google広告に標準搭載されている「自動化ルール」も手軽な自動化手法ですが、行える処理は比較的シンプルです。一方、スクリプトはプログラミング言語で記述するため、極めて高い柔軟性とカスタマイズ性を誇ります。例えば、「過去3日間のコンバージョン率が1.5%以上で、かつ品質スコアが7以上のキーワードの入札単価を10%引き上げる」といった、複数の複雑な条件を組み合わせた独自のロジックを自由に構築できます。自社のKPIや特殊なビジネスルールに合わせた、まさしく「かゆいところに手が届く」自動化が実現できるのです。
3. 強力な外部サービス連携
Google広告スクリプトは、Google広告アカウント内だけの操作に留まりません。同じGoogleが提供するGoogleスプレッドシートやGmail、Googleドライブなどとシームレスに連携することができます。例えば、以下のような高度な連携が可能です。
- 毎日、アカウントのパフォーマンスデータを自動でスプレッドシートに出力し、関係者に自動でグラフ付きのレポートメールを送信する。
- スプレッドシートで管理している商品在庫リストを読み込み、在庫が切れた商品の広告を自動で一時停止する。
- アカウントに何らかの異常(例:予算の急激な消化)を検知したら、担当者のSlackに緊急通知を飛ばす。(※Slack連携には一手間必要です)
このように、単なる広告運用の自動化に留まらず、社内のレポーティング業務や他部署との連携まで効率化できるポテンシャルを秘めています。
デメリットと注意すべき点:導入前に知るべき現実
多くのメリットがある一方で、導入前に必ず理解しておくべきデメリットや技術的な制約も存在します。
1. JavaScriptの学習コスト
最大のデメリットは、やはりJavaScriptの知識が全くない人にとっては利用のハードルが高い点です。メリットで述べたとおり、基礎的な知識があればテンプレート等を活用できますが、全くのゼロから始める場合は、変数、データ型、if文(条件分岐)、for文(繰り返し処理)、関数といった基本的な概念を学ぶ必要があります。幸いJavaScriptは非常にメジャーな言語であるため、オンラインの学習サイトや書籍は豊富に存在します。しかし、一定の学習時間が必要になることは覚悟しておくべきでしょう。
2. 重大な問題を引き起こすリスク
特に注意したいのが、入札単価の変更や広告・キーワードのステータス変更など、アカウントに直接的な変更を加えるスクリプトの扱いです。コードに誤りがあった場合、例えば入札単価を意図せず10倍にしてしまったり、成果の出ているキーワードを全て停止してしまったりと、ビジネスに深刻なダメージを与える重大な問題を引き起こす可能性があります。そのため、スクリプトを実行する前には、必ず「プレビュー」機能を使って、意図した通りの動作をするかを確認する作業が不可欠です。
3. 技術的な実行制限(Quotas)
Google広告スクリプトは無料で強力ですが、無制限に使えるわけではなく、いくつかの技術的な上限(Quotas)が定められています。大規模なアカウントや複雑な処理を行う際には、これらの制限を意識する必要があります。
- 実行時間:1つのスクリプトが実行できる時間は、原則として最大30分です。MCC(クライアントセンター)アカウントから複数の子アカウントに対して並列処理を行う場合は、最大60分まで拡張されます。30分以内に処理が終わらないような重いスクリプトは、処理内容を見直したり、複数に分割したりする必要があります。
- 処理できるエンティティ数:一度に処理できるキーワードや広告の数にも上限があります。例えば、キーワードのリストを取得する際、`iterator` という仕組みでは最大50,000件、IDを指定して取得する `withIds` という仕組みでは最大10,000件といった制限が存在します。
- その他の制限:1つのアカウントで承認(有効化)できるスクリプトの数は最大250個まで、といった細かい制限もあります。
これらの制限を超える処理を行おうとすると、スクリプトは途中でエラーとなり停止してしまいます。自動化したい処理が、これらの制限の範囲内で実現可能かを事前に検討することが重要です。
4. 継続的なメンテナンスの必要性
スクリプトは一度作ったら終わり、ではありません。Google広告の仕様が変更されたり、APIのバージョンがアップデートされたりすると、昨日まで動いていたスクリプトが突然エラーで動かなくなることがあります。定期的に実行ログを確認し、必要に応じてコードを修正する、といった継続的なメンテナンスが求められることも念頭に置いておく必要があります。
Google広告スクリプトで何ができる?【実践サンプルコード10選】
ここでは、Google広告スクリプトを使って具体的にどのような処理が可能になるのかを、コピー&ペーストで即使える実践的なサンプルコードと共にご紹介します。これらを使えば、今日からあなたの広告運用を自動化できます。
はじめに:サンプルコードの正しい使い方
これから紹介するコードを利用する際には、いくつか注意点があります。
- カスタマイズが必要な箇所を修正する:コードの中には、ご自身のメールアドレスやGoogleスプレッドシートのURLなど、環境に合わせて変更する必要がある箇所が含まれています。`// ▼要変更` といったコメントを目印に、ご自身の情報に書き換えてから使用してください。
- 必ず「プレビュー」機能でテストする:アカウントに直接変更を加える前に、必ずスクリプトエディタの「プレビュー」ボタンを押して、テスト実行を行ってください。プレビューでは、実際のアカウントへの変更は行われず、「変更」タブにどのような変更が加えられる予定かが表示されます。ここで意図通りの動作をすることを確認してから、本実行に移るようにしてください。この一手間が、予期せぬ事故を防ぎます。
カテゴリ1:レポート作成の自動化
日々のレポーティング業務は、多くの運用者の時間を奪います。スクリプトを使えば、これらの作業を完全に自動化できます。
1. 日次アカウントパフォーマンスレポートをスプレッドシートに出力
毎日、アカウント全体の主要なパフォーマンス指標(費用、表示回数、クリック数、コンバージョン数、CPAなど)を取得し、指定したGoogleスプレッドシートに追記していくスクリプトです。
function main() {
// ▼要変更: 結果を出力するスプレッドシートのURL
const SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/edit';
// ▼要変更: 結果を出力するシート名
const SHEET_NAME = '日次レポート';
const spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
const sheet = spreadsheet.getSheetByName(SHEET_NAME);
// 昨日付けのデータを取得
const report = AdsApp.report(
'SELECT Date, Cost, Impressions, Clicks, Conversions, CostPerConversion ' +
'FROM ACCOUNT_PERFORMANCE_REPORT ' +
'DURING YESTERDAY');
// スプレッドシートに書き込み
report.exportToSheet(sheet);
Logger.log('日次レポートを出力しました。');
}
解説:このコードは、`ACCOUNT_PERFORMANCE_REPORT` から昨日のデータを取得し、指定したスプレッドシートに書き出します。これを毎日実行するようにスケジュール設定すれば、自動で日次レポートが蓄積されていきます。
2. 検索クエリレポートを自動生成し、除外キーワード候補を洗い出す
定期的に検索クエリレポートを取得し、コンバージョンに繋がっていないにもかかわらず費用が発生しているクエリをスプレッドシートに出力します。これにより、除外キーワードの追加作業が大幅に効率化されます。
function main() {
// ▼要変更: 結果を出力するスプレッドシートのURL
const SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/edit';
// ▼要変更: 結果を出力するシート名
const SHEET_NAME = '除外キーワード候補';
// ▼要変更: 費用がこの値以上でCVが0件のクエリを抽出
const COST_THRESHOLD = 1000;
// ▼要変更: 対象期間(例: 'LAST_30_DAYS', 'LAST_7_DAYS')
const DATE_RANGE = 'LAST_30_DAYS';
const query = 'SELECT Query, Cost, Conversions ' +
'FROM SEARCH_QUERY_PERFORMANCE_REPORT ' +
'WHERE Conversions < 1 AND Cost > ' + COST_THRESHOLD + ' ' +
'DURING ' + DATE_RANGE;
const report = AdsApp.report(query);
const spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
const sheet = spreadsheet.getSheetByName(SHEET_NAME);
sheet.clear(); // シートをクリアしてから書き込み
report.exportToSheet(sheet);
Logger.log('除外キーワード候補リストを出力しました。');
}
解説:`SEARCH_QUERY_PERFORMANCE_REPORT` から、指定した期間内にコンバージョンが0件で、かつ設定した費用(`COST_THRESHOLD`)以上を消化した検索クエリを抽出します。これを週に一度実行するだけで、無駄な費用の発生源を簡単に見つけ出せます。
3. 広告品質スコアを定点観測
主要キーワードの品質スコアを定期的に取得し、スプレッドシートに記録します。スコアの変動を可視化することで、アカウントヘルスの悪化にいち早く気づくことができます。
function main() {
// ▼要変更: 結果を出力するスプレッドシートのURL
const SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/edit';
// ▼要変更: 結果を出力するシート名
const SHEET_NAME = '品質スコア定点観測';
const spreadsheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
let sheet = spreadsheet.getSheetByName(SHEET_NAME);
if (!sheet) {
sheet = spreadsheet.insertSheet(SHEET_NAME);
sheet.appendRow(['日付', 'キャンペーン', '広告グループ', 'キーワード', '品質スコア']);
}
const today = new Date();
const dateString = (today.getMonth() + 1) + '/' + today.getDate();
const keywordIterator = AdsApp.keywords()
.withCondition('Status = ENABLED')
.withCondition('CampaignStatus = ENABLED')
.withCondition('AdGroupStatus = ENABLED')
.get();
while (keywordIterator.hasNext()) {
const keyword = keywordIterator.next();
const qualityScore = keyword.getQualityScore();
if (qualityScore !== null) {
sheet.appendRow([
dateString,
keyword.getCampaign().getName(),
keyword.getAdGroup().getName(),
keyword.getText(),
qualityScore
]);
}
}
Logger.log('品質スコアを記録しました。');
}
解説:有効なキーワードを全て取得し、その品質スコアを日付と共にスプレッドシートに追記します。これにより、時系列でのスコアの変化を追いかけることが可能になります。
カテゴリ2:広告運用の最適化・自動調整
レポートを見るだけでなく、その結果に基づいて自動でアカウントを最適化する、より高度なスクリプトです。
4. 目標CPAに基づいた自動入札単価調整
キーワード毎の過去のCPA実績に応じて、入札単価を自動で調整します。目標CPAを下回っていれば強気に、上回っていれば弱気に調整することで、アカウント全体のCPAを目標値に近づけます。
function main() {
// ▼要変更: アカウント全体の目標CPA
const TARGET_CPA = 3000;
// ▼要変更: 入札単価の最大引き上げ率(例: 1.2 = 20%アップ)
const MAX_BID_INCREASE = 1.2;
// ▼要変更: 入札単価の最大引き下げ率(例: 0.8 = 20%ダウン)
const MAX_BID_DECREASE = 0.8;
// ▼要変更: 変更を判断するための最低クリック数
const MIN_CLICKS = 10;
// ▼要変更: 対象期間
const DATE_RANGE = 'LAST_14_DAYS';
const keywordIterator = AdsApp.keywords()
.withCondition('Status = ENABLED')
.withCondition('CampaignStatus = ENABLED')
.withCondition('AdGroupStatus = ENABLED')
.withCondition('Clicks > ' + MIN_CLICKS)
.forDateRange(DATE_RANGE)
.get();
while (keywordIterator.hasNext()) {
const keyword = keywordIterator.next();
const stats = keyword.getStatsFor(DATE_RANGE);
const cost = stats.getCost();
const conversions = stats.getConversions();
if (conversions > 0) {
const cpa = cost / conversions;
const currentCpcBid = keyword.bidding().getCpc();
if (cpa < TARGET_CPA) {
// CPAが良いので入札を強化
keyword.bidding().setCpc(currentCpcBid * MAX_BID_INCREASE);
Logger.log(keyword.getText() + ' の入札単価を引き上げました。');
} else {
// CPAが悪いので入札を抑制
keyword.bidding().setCpc(currentCpcBid * MAX_BID_DECREASE);
Logger.log(keyword.getText() + ' の入札単価を引き下げました。');
}
}
}
}
解説:指定した期間で一定以上のクリック数があり、かつコンバージョンが1件以上発生しているキーワードを対象にします。そのCPAと目標CPAを比較し、入札単価を自動で調整します。
5. 低品質スコアキーワードの自動一時停止
品質スコアが著しく低いキーワードは、クリック単価の高騰を招き、アカウント全体のパフォーマンスを悪化させる原因となります。このスクリプトは、設定した閾値以下の品質スコアを持つキーワードを自動で一時停止します。
function main() {
// ▼要変更: この品質スコア以下のキーワードを一時停止する
const QUALITY_SCORE_THRESHOLD = 3;
const keywordIterator = AdsApp.keywords()
.withCondition("Status = ENABLED")
.withCondition("CampaignStatus = ENABLED")
.withCondition("AdGroupStatus = ENABLED")
.withCondition("QualityScore < " + (QUALITY_SCORE_THRESHOLD + 1))
.get();
while (keywordIterator.hasNext()) {
const keyword = keywordIterator.next();
const qualityScore = keyword.getQualityScore();
if (qualityScore <= QUALITY_SCORE_THRESHOLD) {
keyword.pause();
Logger.log('キーワード "' + keyword.getText() + '" を品質スコアが低いため一時停止しました (QS: ' + qualityScore + ')。');
}
}
}
解説:有効なキーワードの中から、品質スコアが設定値以下のものを探し出し、自動で`pause()`(一時停止)します。これにより、手動では見落としがちな低品質キーワードを機械的に整理できます。
6. 成果ゼロキーワードの自動停止
長期間にわたり費用だけが発生し、全くコンバージョンに繋がっていないキーワードは、広告費の無駄遣いです。このスクリプトは、そうした「寄生虫」のようなキーワードを自動で洗い出し、一時停止します。
function main() {
// ▼要変更: この費用以上を消化してCVが0なら停止
const COST_THRESHOLD_TO_PAUSE = 5000;
// ▼要変更: 変更を判断するための最低クリック数
const MIN_CLICKS_TO_PAUSE = 50;
// ▼要変更: 対象期間
const DATE_RANGE = "LAST_30_DAYS";
const keywordIterator = AdsApp.keywords()
.withCondition("Status = ENABLED")
.withCondition("CampaignStatus = ENABLED")
.withCondition("AdGroupStatus = ENABLED")
.withCondition("Conversions = 0")
.withCondition("Cost > " + COST_THRESHOLD_TO_PAUSE)
.withCondition("Clicks > " + MIN_CLICKS_TO_PAUSE)
.forDateRange(DATE_RANGE)
.get();
while (keywordIterator.hasNext()) {
const keyword = keywordIterator.next();
keyword.pause();
Logger.log('キーワード "' + keyword.getText() + '" を成果が出ていないため一時停止しました。');
}
}
解説:指定した期間において、コンバージョンがゼロで、かつ設定した費用とクリック数の閾値を超えたキーワードを自動で一時停止します。閾値を自社のビジネスに合わせて調整することで、無駄な広告費の流出を効果的に防ぎます。
カテゴリ3:アカウント監視とアラート通知
アカウントに何か問題が発生した際に、いち早く気づくための監視・通知システムを構築します。
7. リンク切れチェッカー(404エラー検知)
広告のリンク先ページが存在しない(404エラー)状態は、広告費を無駄にするだけでなく、ユーザー体験を著しく損ないます。このスクリプトは、全ての広告の最終ページURLを定期的にチェックし、リンク切れを検知したらメールで通知します。
function main() {
// ▼要変更: 通知を送るメールアドレス
const RECIPIENT_EMAIL = 'your_email@example.com';
const brokenUrls = [];
const adIterator = AdsApp.ads()
.withCondition('Status = ENABLED')
.withCondition('CampaignStatus = ENABLED')
.withCondition('AdGroupStatus = ENABLED')
.get();
while (adIterator.hasNext()) {
const ad = adIterator.next();
const url = ad.urls().getFinalUrl();
if (url) {
try {
const response = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
if (response.getResponseCode() == 404) {
brokenUrls.push({
url: url,
campaign: ad.getCampaign().getName(),
adGroup: ad.getAdGroup().getName()
});
}
} catch (e) {
// URLが存在しない、タイムアウトなど
brokenUrls.push({
url: url,
campaign: ad.getCampaign().getName(),
adGroup: ad.getAdGroup().getName(),
error: e.message
});
}
}
}
if (brokenUrls.length > 0) {
let mailBody = '以下のURLでリンク切れ(404エラー)またはアクセスエラーを検知しました。\n\n';
brokenUrls.forEach(function(item) {
mailBody += 'Campaign: ' + item.campaign + '\n';
mailBody += 'Ad Group: ' + item.adGroup + '\n';
mailBody += 'URL: ' + item.url + '\n';
if(item.error) mailBody += 'Error: ' + item.error + '\n';
mailBody += '---------------------------------\n';
});
MailApp.sendEmail(RECIPIENT_EMAIL, '[Google広告スクリプト] リンク切れ通知', mailBody);
} else {
Logger.log('リンク切れはありませんでした。');
}
}
解説:有効な全ての広告の最終ページURLにアクセスを試み、HTTPステータスコードが404(Not Found)の場合、またはアクセス自体に失敗した場合に、そのURLと所属するキャンペーン・広告グループをメールで通知します。
8. 予算超過アラート
キャンペーンの消化ペースが速すぎるときに、予算を使い切る前にアラートを出すスクリプトです。意図しない予算のオーバーを防ぎます。
function main() {
// ▼要変更: 通知を送るメールアドレス
const RECIPIENT_EMAIL = 'your_email@example.com';
// ▼要変更: 1日の予算のこの割合(%)を消化したら通知
const BUDGET_USAGE_THRESHOLD = 80;
const campaignsToAlert = [];
const campaignIterator = AdsApp.campaigns()
.withCondition("Status = ENABLED")
.get();
while(campaignIterator.hasNext()){
const campaign = campaignIterator.next();
const budget = campaign.getBudget().getAmount();
const stats = campaign.getStatsFor("TODAY");
const cost = stats.getCost();
if (budget > 0 && (cost / budget * 100) >= BUDGET_USAGE_THRESHOLD) {
campaignsToAlert.push({
name: campaign.getName(),
cost: cost,
budget: budget,
usage: Math.round(cost / budget * 100)
});
}
}
if(campaignsToAlert.length > 0){
let mailBody = '以下のキャンペーンが本日の予算の' + BUDGET_USAGE_THRESHOLD + '%以上を消化しました。\n\n';
campaignsToAlert.forEach(function(c){
mailBody += 'キャンペーン名: ' + c.name + '\n';
mailBody += '予算: ' + c.budget + '円\n';
mailBody += '現在の費用: ' + c.cost + '円\n';
mailBody += '消化率: ' + c.usage + '%\n';
mailBody += '---------------------------------\n';
});
MailApp.sendEmail(RECIPIENT_EMAIL, '[Google広告スクリプト] 予算超過アラート', mailBody);
} else {
Logger.log('予算超過のキャンペーンはありません。');
}
}
解説:1時間ごとに実行するよう設定すれば、各キャンペーンのその日の費用が予算の何パーセントに達したかを監視し、閾値を超えた場合に通知を送ることができます。
9. 広告不承認アラート
新しい広告を作成したり、既存の広告を編集したりした際に、ポリシー違反で「不承認」となることがあります。これに気づかないと機会損失に繋がるため、不承認を検知したら即座に通知します。
function main() {
// ▼要変更: 通知を送るメールアドレス
const RECIPIENT_EMAIL = 'your_email@example.com';
const disapprovedAds = [];
const adIterator = AdsApp.ads()
.withCondition("Status = ENABLED")
.withCondition("CampaignStatus = ENABLED")
.withCondition("AdGroupStatus = ENABLED")
.withCondition("ApprovalStatus = DISAPPROVED")
.get();
while (adIterator.hasNext()) {
const ad = adIterator.next();
disapprovedAds.push({
campaign: ad.getCampaign().getName(),
adGroup: ad.getAdGroup().getName(),
headline: ad.isType().expandedTextAd() ? ad.asType().expandedTextAd().getHeadlinePart1() : 'N/A'
});
}
if (disapprovedAds.length > 0) {
let mailBody = '以下の広告が「不承認」と判定されました。管理画面で詳細を確認してください。\n\n';
disapprovedAds.forEach(function(adInfo) {
mailBody += 'キャンペーン: ' + adInfo.campaign + '\n';
mailBody += '広告グループ: ' + adInfo.adGroup + '\n';
mailBody += '広告見出し1: ' + adInfo.headline + '\n';
mailBody += '---------------------------------\n';
});
MailApp.sendEmail(RECIPIENT_EMAIL, '[Google広告スクリプト] 広告不承認アラート', mailBody);
} else {
Logger.log('不承認の広告はありませんでした。');
}
}
解説:有効な広告の中で、承認ステータスが `DISAPPROVED` になっているものを探し出し、リストアップしてメールで通知します。これにより、迅速な修正対応が可能になります。
10. 祝日対応!キャンペーン自動オンオフ
BtoBビジネスなどで、土日祝日には広告配信を停止したい場合があります。このスクリプトは、Googleカレンダーの日本の祝日カレンダーを参照し、祝日であれば指定したキャンペーンを自動で停止、祝日でなければ有効にします。
function main() {
// ▼要変更: 自動オンオフしたいキャンペーン名の部分一致(例: '指名' を含むキャンペーン)
const CAMPAIGN_NAME_CONTAINS = "指名";
// 日本の祝日カレンダーを取得
const calendar = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
const today = new Date();
const events = calendar.getEventsForDay(today);
const campaignIterator = AdsApp.campaigns()
.withCondition("Name CONTAINS '" + CAMPAIGN_NAME_CONTAINS + "'")
.get();
if (events.length > 0) {
// 今日は祝日なのでキャンペーンを停止
Logger.log("本日は祝日です。キャンペーンを停止します。");
while (campaignIterator.hasNext()) {
const campaign = campaignIterator.next();
campaign.pause();
Logger.log(campaign.getName() + " を停止しました。");
}
} else {
// 今日は祝日ではないのでキャンペーンを有効化
Logger.log("本日は祝日ではありません。キャンペーンを有効化します。");
while (campaignIterator.hasNext()) {
const campaign = campaignIterator.next();
campaign.enable();
Logger.log(campaign.getName() + " を有効化しました。");
}
}
}
解説:`CalendarApp` を使って日本の祝日カレンダーにアクセスし、実行日が祝日かどうかを判定します。祝日であれば対象キャンペーンを `pause()` し、そうでなければ `enable()` します。毎朝実行するように設定すれば、手動でのオンオフ作業が不要になります。
Google広告スクリプトの設定と操作方法【詳細ガイド】
ここでは、Google広告スクリプトの設定方法や日々の操作方法について、初心者がつまずきやすいポイントも踏まえながら、より詳しくご紹介します。
スクリプトの追加と承認
まずはGoogle広告の管理画面を開きます。画面上部のメニューから「ツールと設定」をクリックし、ポップアップメニュー内の「一括操作」カテゴリにある「スクリプト」を選択してください。
スクリプト一覧画面が表示されます。青い「+」ボタンをクリックすると、新しいスクリプトを作成できます。
「新規スクリプト」を選択すると、スクリプトエディタ(IDE)画面に移動します。ここに、先ほど紹介したようなJavaScriptのコードを貼り付けたり、自分で記述したりします。
エディタ画面で、まずは①「スクリプト名」を「日次レポート出力」など、分かりやすい名前に変更します。次に、②のメインエリアにコードを記述します。最後に、重要なのが③「承認」です。初めてスクリプトを保存・実行する際には、このスクリプトがあなたのアカウント情報を閲覧・変更することを許可する必要があります。「承認」ボタンをクリックし、ポップアップに従ってGoogleアカウントでログインし、アクセスを許可してください。この承認作業は、スクリプトごとに最初の1回だけ必要です。
「テンプレートから開始」を選ぶと上図のメニューが現れるので、ニーズに合ったテンプレートを選びましょう。これにより、ある程度コードが完成した状態から始めることができ、初心者には特におすすめです。
テンプレートを選ぶと、そのスクリプトがエディタに入力された状態で表示されます。あとは、メールアドレスやスプレッドシートURLなど、必要な箇所を少し手を加えるだけで、スクリプトを完成させることが可能です。
なお、作成したスクリプトを一覧から非表示にしたい(無効にしたい)場合は、下記の手順で行います。
スクリプト一覧から対象スクリプトのステータス列にある緑の丸をクリックし「無効にする」を選ぶと、一覧から非表示になります。これは削除ではなく、あくまで無効化です。
スケジュール(頻度)の設定
作成したGoogle広告スクリプトを自動で実行するためのスケジュール設定は、一覧画面から行います。「頻度」の列にある値(新規作成時は「-」)にカーソルを合わせます。
カーソルを合わせると鉛筆アイコンが表示されるので、これをクリックします。すると、実行頻度や日時を設定するためのウィンドウが表示されます。
頻度は「1回のみ」「1時間ごと」「毎日」「毎週」「毎月」から選択できます。例えば「毎日」を選んだ場合は、実行する時刻も設定できます。「保存」をクリックすれば、スケジュール設定は完了です。
スクリプトの管理や実行履歴の確認
作成したスクリプトは、スクリプト一覧画面で一元管理できます。
また、先ほど「無効」にしたスクリプトも、一覧画面の右上にある「その他」アイコンから「無効なスクリプトを表示」を選択すれば、再度表示させることが可能です。
スクリプトがいつ、どのように実行されたかを確認するために、操作ログが残されています。スクリプト一覧画面の上部にある「スクリプトの履歴」タブを選択すれば、過去の実行履歴を一覧で確認することができます。
ここでは、各実行の開始時刻、所要時間、ステータス(完了 or エラー)が確認できます。「結果」の列にある「ログを表示」をクリックすれば、`Logger.log()` で出力した内容や、エラーが発生した場合はその詳細を確認でき、デバッグの際に非常に役立ちます。
どの自動化手法を選ぶべきか?【スクリプト vs 自動化ルール vs API 徹底比較】
Google広告の自動化には、スクリプト以外にもいくつかの選択肢があります。ここでは、それぞれの特徴を理解し、ご自身の目的やスキルに最適な手法を選べるよう、詳細な比較を行います。
Google広告における3つの主要な自動化手法
Google広告の運用を自動化する主な手法は、以下の3つです。
- 自動化ルール:最も手軽な、コーディング不要の自動化。
- Google広告スクリプト:本記事で解説している、柔軟性とコストのバランスに優れた手法。
- Google Ads API:最も高機能でパワフルな、本格的な開発者向けの手法。
これらはどれが優れているというわけではなく、それぞれに得意なこと、不得意なことがあります。違いを理解し、適切に使い分けることが重要です。
機能・コスト・技術要件 比較一覧表
まずは、3つの手法の違いが一目でわかるように、比較表にまとめました。
項目 | 自動化ルール | Google広告スクリプト | Google Ads API |
---|---|---|---|
できること | シンプル(キーワードのオンオフ、予算・入札単価変更など) | 複雑なロジック、レポート作成、外部サービス連携など柔軟 | ほぼ全ての操作、リアルタイム連携、独自ツール開発など最も高機能 |
コスト | 無料 | 無料 | API利用は無料だが、開発・サーバー維持コストが発生 |
実行頻度 | 低い(1日1回、毎週、毎月など) | 高い(1時間に1回、毎日など) | 非常に高い(ほぼリアルタイムでの操作が可能) |
必要なスキル | 不要(管理画面のUI操作のみ) | 中(JavaScriptの基礎知識) | 高(専門的なプログラミングスキル、サーバー知識) |
向いている人 | プログラミング経験のない運用者、シンプルな定型作業をなくしたい人 | 無料で高度な自動化をしたい運用者、基本的なコードが読める人 | 大規模アカウントを管理する代理店、自社で広告運用ツールを開発したい企業 |
それぞれの特徴と最適なシナリオ
1. 自動化ルール:最も手軽な定型処理
特徴:管理画面のUI(ユーザーインターフェース)上で「もし〇〇だったら、△△する」というルールを設定するだけで、コーディングは一切不要です。
長所:誰でも、今すぐに使える手軽さが最大の魅力です。
短所:実行頻度が最大でも1日1回と低く、複雑な条件分岐(「AかつB、またはCの場合」など)は設定できません。また、スプレッドシートなど外部との連携も不可能です。
最適なシナリオ:「毎日、前日のCPAが5,000円を超えたキャンペーンを一時停止する」「毎週月曜の朝に、特定のキャンペーンの予算を10%引き上げる」といった、非常にシンプルな定型作業の自動化に向いています。
2. Google広告スクリプト:柔軟性とコストのベストバランス
特徴:JavaScriptを用いて、より複雑で自由なロジックを組むことができます。Googleのサーバー上で実行され、スプレッドシートやGmailといった外部サービスとも連携できます。
長所:無料で利用できるにもかかわらず、APIに近いレベルの高度なカスタマイズが可能です。実行頻度も1時間に1回と、多くの用途で十分なレベルです。
短所:JavaScriptの基礎知識が必要で、実行時間や処理件数に上限があるため、超大規模な処理には向きません。
最適なシナリオ:本記事で紹介したような、日次レポートの自動作成、複数の条件を組み合わせた入札単価調整、リンク切れの監視など、ほとんどの広告運用者が望むであろう「少し高度な自動化」に最適です。
3. Google Ads API:最高レベルの機能性とリアルタイム性
特徴:自社で用意した外部サーバーから、Google広告のシステムに直接アクセスし、データを操作するための「接続口」です。機能的な制約はほぼありません。
長所:リアルタイムでのデータ取得や更新が可能で、自社のCRMデータと連携した広告配信や、独自の高機能な広告運用・レポーティングツールを開発することもできます。
短所:利用には高度なプログラミングスキルと、プログラムを実行するためのサーバー環境が必須です。そのため、開発コストやサーバーの維持コストが発生します。
最適なシナリオ:何百ものアカウントを管理する大手広告代理店が統合管理ツールを開発するケースや、ECサイトが自社の在庫システムとリアルタイムで連携し、在庫数に応じた広告配信を行うケースなど、大規模かつ高度なシステム連携が求められる場面で利用されます。
その他の広告プラットフォームの動向
こうしたスクリプトによる自動化の波は、他の広告プラットフォームにも広がっています。
Yahoo!広告:同様に、Yahoo!広告スクリプト機能が2023年2月から提供開始されました。Google広告スクリプトと類似した使い方が可能で、広告の出稿やレポート作成はもちろん、GoogleドライブやSlackなどとも連携できるため、クロスプラットフォームでの運用効率化が期待できます。
Microsoft広告:Microsoft Advertisingにも「Microsoft Advertisingスクリプト」機能があり、同様にJavaScriptを使って処理を自動化できます。近年シェアを伸ばしている検索エンジンBingへの広告出稿において、同様の効率化が可能です。
TikTok広告:性質は異なりますが、2023年6月にAIを使って数秒で広告用の動画スクリプト(台本)を生成する「スクリプトジェネレーター」が公開されています。これは運用自動化とは異なりますが、クリエイティブ制作を効率化するツールとして注目されています。
まとめ:スモールスタートで自動化の世界へ
本記事では、Google広告スクリプトが無料で利用でき、日々の面倒な作業を自動化するための非常に便利なツールであることを、具体的なサンプルコードを交えながら解説しました。
確かに、JavaScriptの知識が全くない方が利用するには、最初は少しハードルが高いと感じるかもしれません。しかし、今回ご紹介した豊富なサンプルコードやテンプレートを活用し、まずはリスクの低いレポート作成やアラート通知のスクリプトから試していくことで、その絶大な効果を実感できるはずです。
簡単なスクリプトから挑戦し、少しずつ知識をつけていくことで、広告運用業務は劇的に効率化され、これまで定型作業に費やしていた時間を、より本質的な戦略立案やクリエイティブ改善に充てることができるようになります。それは、単なる工数削減に留まらず、競合他社との差別化を図り、広告成果を飛躍させるための強力な武器となるでしょう。
怖がらず、まずはこの記事のサンプルコードを一つ、ご自身のアカウントで「プレビュー」実行してみることから、自動化の世界への第一歩を踏み出してみてはいかがでしょうか。
当社では、AI超特化型・自立進化広告運用マシン「NovaSphere」を提供しています。もしこの記事を読んで
・理屈はわかったけど自社でやるとなると不安
・自社のアカウントや商品でオーダーメイドでやっておいてほしい
・記事に書いてない問題点が発生している
・記事を読んでもよくわからなかった
など思った方は、ぜひ下記のページをご覧ください。手っ取り早く解消しましょう
▼AI超特化型・自立進化広告運用マシンNovaSphere▼
